package com.xmg.p2p.base.util;

import com.xmg.p2p.base.domain.Logininfo;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;


/**
 * 前台专门用于登陆检查的拦截器
 */
public class LoginCheckInterceptor extends HandlerInterceptorAdapter {

    //或者也可以用  implement  HandlerInterceptor 来做

    //适配器实现了HandlerInterceptor的所有方法  我们只需去覆盖需要用到的方法即可

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        System.err.println("-----preHandle------");
        //判断登陆逻辑
        //判断当前请求的方法
        if (handler instanceof HandlerMethod) {  //HandlerMethod包装了我这次请求要访问的controller里的具体方法
            HandlerMethod hm = (HandlerMethod) handler;
            RequireLogin rl = hm.getMethodAnnotation(RequireLogin.class);//获取到当前方法上是否有注解
            Method method = hm.getMethod();//获取当前请求的Method
            Annotation[] annotation = method.getAnnotations();  // 可以拿到当前请求的所有注解
            Annotation[] declaredAnnotations = method.getDeclaredAnnotations();
            //rl != null  说明该方法需要登陆才能访问
            Logininfo current = UserContext.getCurrent();
            if (rl != null && UserContext.getCurrent() == null) {   // 代表访问这个接口时没有登录
                response.sendRedirect("/login.html");
                return false; //阻止继续执行
            }
        }
        return super.preHandle(request, response, handler);   //正常的放行
    }


}
